package org.feng.config;

import lombok.extern.slf4j.Slf4j;
import org.feng.handler.RouterHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.server.RequestPredicates;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;

/**
 * WebFlux 路由配置
 *
 * @version v1.0
 * @author: fengjinsong
 * @date: 2022年06月07日 21时03分
 */
@Slf4j
@Configuration
public class RouterConfiguration {
    @Bean
    public RouterFunction<ServerResponse> routerMapper(RouterHandler handler) {
        log.info("注册路由...");

        // 这里在写完整后，可以考虑使用 import static 来简化代码；虽然牺牲了一部分可读性，但是一些无用代码确实能大面积减少
        return RouterFunctions
                // 根路径
                .nest(RequestPredicates.path("/webflux"),
                        RouterFunctions
                                .route(RequestPredicates.GET("/hello").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), handler::hello)
                                // 追加其他路由
                                .andRoute(RequestPredicates.GET("/getEmpById").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), handler::getEmpById)
                );
    }
}
